package gen

import (
	"server/application/db/schema/dbops"
)

const AppendStr = "//{{append}}"

var skinGenConstants = []string{
	"gen_test.go", "gen1_test.go", "mouse.go", "constant",
	"lang.go", "lang_test.go", "lang_data",
}

type EntityInfo struct {
	//实体名称
	EntityName string `json:"entity_name,omitempty"`

	////下划线名称
	//EntityLineName string `json:"entity_line_name,omitempty"`
	////小驼峰命名法
	//EntityCamelCaseName string `json:"entity_camel_case_name,omitempty"`
	//用户自定义配置
	UserConfig *dbops.EntityConfig `json:"user_config"`
	//字段列表
	FieldList []*FieldInfo `json:"field_list,omitempty"`
}

// FieldInfo 字段实体
type FieldInfo struct {
	FieldName     string            `json:"field_name"`      //字段名称
	DbFieldName   string            `json:"db_field_name"`   //数据库的字段名
	FieldLineName string            `json:"field_line_name"` //下划线命名法
	IsPK          bool              `json:"is_pk"`           //是否为主键
	PkFieldName   string            `json:"pk_field_name"`   //主键字段的名称
	Label         string            `json:"label"`           //字段标签
	TypeGo        string            `json:"type_go"`         //Go语言的类型-字符形式,组装dbdto时用到
	EditConfig    FieldEditConfig   `json:"edit_config"`
	DtoConfig     FieldDtoConfig    `json:"dto_config"`  //dto相关配置
	ColsConfig    FieldColumnConfig `json:"cols_config"` //列表页字段配置
	SearchConfig  FieldSearchConfig `json:"search_config"`
}

type FieldEditConfig struct {
	FormType     string       `json:"form_type"`     //表单类型：input radio select
	FormOptions  []OptionItem `json:"form_options"`  //表单附加数据下拉、多选等
	FormRequired bool         `json:"form_required"` //字段表单必填
	FormColSpan  int          `json:"form_col_span"` //字段行span，可选值1-24
	DicKey       string       `json:"dic_key"`       //关联的字典key,表单select radios时才有效
}

type FieldDtoConfig struct {
	JsonName string `json:"json_name"` //json tag的名称
	IsCreate bool   `json:"is_create"` //是否属于编辑参数
	IsInfo   bool   `json:"is_info"`   //是否属于info参数
	IsUpdate bool   `json:"is_update"` //是否属于Update参数
	IsDelete bool   `json:"is_delete"` //是否属于Delete参数
}

type OptionItem struct {
	label string `json:"label"`
	value string `json:"value"`
}
